package com.gjy.concurrency.hc;

import org.junit.jupiter.api.Test;

import java.util.Arrays;
import java.util.concurrent.CopyOnWriteArrayList;

/**
 * CopyOnWriteArrayList
 * CopyOnWriteArrayList集合适合用于读操作远远多于写操作，并且在使用时需要保证集合读操作性能的多线程场景。
 * <p>
 * 锁保证的是写操作的安全性
 * 不支持在迭代器上进行的数据对象更改操作（使用remove()方法、set()方法和add()方法）
 *
 * @author 宫静雨
 * @version 1.0
 * @since 2023-03-30 14:15:08
 */
public class HcCwAList {

    private static final CopyOnWriteArrayList<Integer> cwl = new CopyOnWriteArrayList<>();

    @Test
    public void test2() {
        int[] arr = {1, 2, 3};
        int[] newArr = Arrays.copyOf(arr, arr.length + 1);
        System.out.println("newArr = " + Arrays.toString(newArr));
    }

    @Test
    public void test1() {
        cwl.add(1);
        cwl.add(2);
        cwl.add(3);
        cwl.add(4);
        /*for (int i = 0; i < cwl.size(); i++) {
            System.out.println("cwl.get(i) = " + cwl.get(i));
            cwl.add(cwl.get(i) * 2);
        }*/

        /*for (Integer i : cwl) {
            System.out.println("i = " + i);
            cwl.add(i * 2);
        }*/

        cwl.forEach(c -> {
            System.out.println("c = " + c);
//            cwl.add(c * 2);
//            cwl.remove(c);
            cwl.set(0, 3);
        });

        System.out.println(cwl);
    }
}
